/**
找出输入的多行数据中的重复行
WangGang
2018/7/21
*/
package main

import (
	"bufio"
	"os"
	"fmt"
	"strings"
	"text/scanner"
)

//const src  = `if a > 10 {someParsable = text}`
const src  = `Unicode（统一码、万国码、单一码）是 计算机科学 领域 里 的 一项 业界标准`
var s scanner.Scanner //类型scanner.Scanner

func main() {

	scanTest(s)

	//inputRead()
}

//读取屏幕输入信息，对输入的重复信息进行统计
//当键入end时退出
func inputRead()  {
	counts := make(map[string]int)
	//读取标准输入内容，以行或单词为单位
	inputRead := bufio.NewScanner(os.Stdin)
	for inputRead.Scan()  {
		//控制循环退出，Text()获取读取到的内容
		if inputRead.Text() == "end" { break }
		//当数据重复时，map中的值会增加，例如输入:a,a,b
		counts[inputRead.Text()]++
	}

	//循环map，将值大于1的信息取出
	for line,n := range counts{
		if n > 1 {
			fmt.Printf("该行为重复行:%s,重复次数为:%d\n",line,n)
		}
	}
}

//读取文件内容，并按词进行区分,对于中文的支持需要靠符号及空格区分
func scanTest(s scanner.Scanner)string {
	s.Init(strings.NewReader(src))//将常量src中的内容初始化进去
	s.Filename = "example"
	//扫描信息
	//Scan() 扫描从源读取下一个标记或Unicode字符并将其返回。
	for tok:=s.Scan();tok!=scanner.EOF ; tok=s.Scan() {
		//TokenText 返回对应于最近扫描的标记的字符串。调用 Scan() 后有效。
		fmt.Printf("%s: %s\n", s.Position, s.TokenText())
	}
	return  ""
}
